//
//  NSObject+LYExtension.h
//  LYExtension
//
//  Created by cqck on 2021/12/2.
//

#import <UIKit/UIKit.h>

@interface NSObject (LYExtension)

/**
 @brief 版本号对比

 @param currentVersion 当前版本号
 @param targetVersion 需要对比的版本号
 @return BOOL targetVersion > currentVersion YES targetVersion <= currentVersion NO
 */
+ (BOOL)versionCompareCurrentVersion:(NSString *)currentVersion targetVersion:(NSString *)targetVersion;

/**
 @brief 缓存对象到NSUserDefaults

 @param obj 待缓存的对象
 @param key 待缓存对象的key
 */
+ (void)saveUserDefaultWithObject:(id)obj key:(NSString *)key;

/**
 @brief 获取NSUserDefaults缓存对象

 @param key 待缓存对象的key
 @return id 取出来的对象
 */
+ (id)getUserDefaultObjectWithKey:(NSString *)key;

/**
 @brief 根据对象key，删除NSUserDefaults缓存对象

 @param key 待缓存对象的key
 */
+ (void)removeUserDefaultObjectWithKey:(NSString *)key;

/**
 @brief 存储对象到keychain

 @param obj 待缓存对象
 @param service 待存储对象的服务名称
 @param key 待存储对象的key
 */
+ (void)saveKeychainWithObject:(id)obj service:(NSString *)service key:(NSString *)key;

/**
 @brief 获取存储到keychain的对象

 @param service 储对象的服务名称
 @param key 存储对象的key
 @return id 获取的存储对象
 */
+ (id)getKeychainObjectWithService:(NSString *)service key:(NSString *)key;

/**
 @brief 删除存储到keychain的对象

 @param service 储对象的服务名称
 @param key 存储对象的key
 @param error 失败信息
 */
+ (void)removeKeychainObjectWithService:(NSString *)service key:(NSString *)key error:(NSError *__autoreleasing *)error;

/**
 @brief 格式化NSNull对象

 @param obj 待格式化对象
 @return id NSNull对象返回nil，其余返回原对象
 */
+ (id)formatNullObj:(id)obj;

/**
 @brief 替换原有方法

 @param oriSel 原有方法
 @param swizzledSel 替换方法
 @param cls 类
 @param didInstanceMethod 是否是类的实例方法
 */
+ (void)swizzleMethodWithOriginSel:(SEL)oriSel
                       swizzledSel:(SEL)swizzledSel
                          classObj:(Class)cls
                    instanceMethod:(BOOL)didInstanceMethod;

/**
 @brief 将对象字典、数组转换成JSON字符串

 @return NSString json字符串,不符合要求的返回@“”
 */
- (NSString *)toJSONStr;

@end
